package org.xmdl.silk.visit;

import org.xmdl.silk.Assignment;
import org.xmdl.silk.Invocation;
import org.xmdl.silk.Literal;
import org.xmdl.silk.Method;
import org.xmdl.silk.NumDouble;
import org.xmdl.silk.NumInteger;
import org.xmdl.silk.Operation;
import org.xmdl.silk.ParaGroup;
import org.xmdl.silk.PrintStatement;
import org.xmdl.silk.Program;
import org.xmdl.silk.ReturnStatement;
import org.xmdl.silk.Variable;
import org.xmdl.silk.VariableRef;
import org.xmdl.silk.interpreter.Operator;

public interface Visitor {

	boolean visitEnter(Program host);
	boolean visitLeave(Program host);

	boolean visit(NumInteger host);

	boolean visit(NumDouble host);
	
	boolean visit(Literal host);
	
	boolean visitEnter(ParaGroup host);
	boolean visitLeave(ParaGroup host);

	boolean visitEnter(Operator host);
	boolean visitLeave(Operator host);

	boolean visitEnter(Operation host);
	boolean visitLeave(Operation host);

	boolean visitEnter(Assignment host);
	boolean visitLeave(Assignment host);
	
	boolean visitEnter(PrintStatement host);
	boolean visitLeave(PrintStatement host);
	
	boolean visitEnter(ReturnStatement host);
	boolean visitLeave(ReturnStatement host);

	boolean visit(Variable host);

	boolean visitEnter(VariableRef host);
	boolean visitLeave(VariableRef host);

	boolean visitEnter(Method host);
	boolean visitLeave(Method host);

	boolean visitEnter(Invocation host);
	boolean visitLeave(Invocation host);
}
